export async function sleep(millisecond) {
  return await new Promise(resolve => setTimeout(resolve, millisecond));
}

/**
 * 防抖函数
 * @param func
 * @param delay
 * @returns {function(...[*]=)}
 */
export function debounce(func, delay) {
  let timer = null;
  return function (...args) {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  }
}

/**
 * 格式化日期格式
 * @param {Date} date UTC时间戳
 * @param {String} pattern 格式化的模式, 例如 'yyyy-MM-dd'
 * @returns 
 */
export function formatDate(date, pattern) {
  if (/(y+)/.test(pattern)) { // 获取年份
    pattern = pattern.replace(RegExp.$1, date.getFullYear().toString().substr(4 - RegExp.$1.length));
  }

  // 替换方案
  let o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (let k in o) {
    if (new RegExp(`(${k})`).test(pattern)) {
      let str = o[k] + '';
      pattern = pattern.replace(RegExp.$1, 
        RegExp.$1.length === 1 ? str : padLeftZero(str));
    }
  }
  return pattern;
}

function padLeftZero(str) {
  return ('00' + str).substr(str.length);
}